#ifndef __COMMON_CONFIG_H__
#define __COMMON_CONFIG_H__

#define CPS121_SENSOR

#ifdef CPS121_SENSOR
#define CPS121_EXYERNAL_IDX CPS121_IDX_9 /* CPS121传感器-外部大气压索引 */
#endif

typedef enum
{
    /* 通用返回码 */
    RESULT_STATUS_OK            = 0U, /*!< 处理成功 */
    RESULT_STATUS_ERROR         = 1U, /*!< 通用错误 */
    RESULT_STATUS_INVALID_PARAM = 2U, /*!< 参数无效 */

    /* GPIO返回码 */
    RESULT_STATUS_GPIO_PORT_ERROR = 3U, /*!< 端口错误 */
    RESULT_STATUS_GPIO_PIN_ERROR  = 4U, /*!< 引脚错误 */

    /* CAN返回码 */
    RESULT_STATUS_CAN_BUSY            = 5U, /*!< CAN总线忙 */
    RESULT_STATUS_CAN_TIMEOUT         = 6U, /*!< CAN超时 */
    RESULT_STATUS_CAN_ERROR           = 7U, /*!< CAN通用错误 */
    RESULT_STATUS_CAN_OK              = 8U, /*!< CAN处理成功 */
    RESULT_STATUS_CAN_NOT_INITIALIZED = 9U, /*!< CAN未初始化 */

    /* SPI返回码 */
    RESULT_STATUS_SPI_TX_UNDERRUN = 10U, /*!< Tx下溢错误 */
    RESULT_STATUS_SPI_RX_OVERRUN  = 11U, /*!< Rx上溢错误 */
    RESULT_STATUS_SPI_ABORTED     = 12U, /*!< 一次转移操作已结束 */
    RESULT_STATUS_SPI_ERROR       = 13U, /*!< SPI通用错误 */

    /* common button返回码 */
    RESULT_STATUS_BUTTON_FULL = 14U, /*!< 按键已满 */

    /* common queue返回码 */
    RESULT_STATUS_QUEUE_FULL       = 15U, /*!< 队列已满 */
    RESULT_STATUS_QUEUE_EMPTY      = 16U, /*!< 队列已空 */
    RESULT_STATUS_QUEUE_PUSH_ERROR = 17U, /*!< 入队失败 */
    RESULT_STATUS_QUEUE_POP_ERROR  = 18U, /*!< 出队失败 */

    /* I2C返回码 */
    RESULT_STATUS_I2C_BUSY           = 19U, /*!< I2C总线忙 */
    RESULT_STATUS_I2C_WAIT_ACK_ERROR = 20U, /*!< I2C等待ACK错误 */

    /* WDG返回码 */
    RESULT_STATUS_WDG_INIT_ERROR = 21U, /*!< WDG初始化错误 */

    /* LIN返回码 */
    RESULT_STATUS_LIN_INIT_ERROR     = 22U, /*!< LIN初始化错误 */
    RESULT_STATUS_LIN_TRANSFER_ERROR = 23U, /*!< LIN传输错误 */

    /* FLASH返回码 */
    RESULT_STATUS_FLASH_PAGE_ADDR_OVERSTEP = 24U, /*!< FLASH页地址越界 */
    RESULT_STATUS_FLASH_ERASE_PAGE_FAIL    = 25U, /*!< FLASH擦除页失败 */
    RESULT_STATUS_FLASH_ERASE_VERIFY_FAIL  = 26U, /*!< FLASH擦除校验失败 */
    RESULT_STATUS_FLASH_WRITE_FAIL         = 27U, /*!< FLASH写失败 */

    /* 其他返回码 */
    RESULT_STATUS_NOT_INITIALIZED = 28U, /*!< 未初始化 */
    RESULT_STATUS_NOT_IMPLEMENTED = 29U, /*!< 未实现执行函数 */

    /* 按摩系统返回码 */
    RESULT_STATUS_MASSAGE_NOT_OPEN = 30U, /*!< 按摩系统未打开 */

    /* FLASH操作返回码 */
    RESULT_STATUS_FLASH_ERR_OK             = 31U, /*!< FLASH操作成功 */
    RESULT_STATUS_FLASH_ERR_GENERAL        = 32U, /*!< FLASH操作通用错误 */
    RESULT_STATUS_FLASH_ERR_INVALID_PARAM  = 33U, /*!< FLASH操作参数无效 */
    RESULT_STATUS_FLASH_ERR_NOT_FOUND      = 34U, /*!< FLASH操作未找到 */
    RESULT_STATUS_EEPROM_ERR_OK            = 35U, /*!< 操作成功 */
    RESULT_STATUS_EEPROM_ERR_INVALID_INDEX = 36U, /*!< 索引无效 */
    RESULT_STATUS_EEPROM_ERR_DATA_TOO_LONG = 37U, /*!< 数据长度超限 */
    RESULT_STATUS_EEPROM_ERR_NO_SPACE      = 38U, /*!< 存储空间不足 */
    RESULT_STATUS_EEPROM_ERR_ALIGNMENT     = 39U, /*!< 地址对齐异常 */
    RESULT_STATUS_EEPROM_ERR_NOT_FOUND     = 40U, /*!< 数据不存在 */
    RESULT_STATUS_EEPROM_ERR_CRC_FAIL      = 41U, /*!< CRC校验失败 */
    RESULT_STATUS_EEPROM_ERR_INIT_FAIL     = 42U, /*!< 初始化失败 */
    RESULT_STATUS_EEPROM_ERR_FLASH_FAIL    = 43U, /*!< Flash操作失败 */

    /* 加热和通风返回码 */
    RESULT_STATUS_HEAT_FAN_INTERLOCK_BLOCKED = 44U, /*!< 加热和通风互锁阻塞 */
} result_e;

#define CHECK_RESULT(func_call, error_msg)                                                                 \
    do {                                                                                                   \
        result_e result = func_call;                                                                       \
        if (result != RESULT_STATUS_OK) {                                                                  \
            LOG(error_msg ": %u\n", result);                                                               \
            return result; /* 或其他错误处理 */                                                            \
        }                                                                                                  \
    } while (0)

#endif
